#!/usr/bin/python3
# _*_ coding: utf-8 _*_
#
# Copyright (C) 2024 - 2024 heihieyouheihei, Inc. All Rights Reserved 
#
# @Time    : 2024/8/23 22:33
# @Author  : Yuyun
# @File    : leetcode_202_快乐数.py
# @IDE     : PyCharm

"""
编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为：
对于一个正整数，每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1，也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1，那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ；不是，则返回 false 。



示例 1：
输入：n = 19
输出：true
解释：
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

示例 2：
输入：n = 2
输出：false


提示：
1 <= n <= 2^31 - 1
"""

class Solution:
    #计算数字按位平方和
    def total(self, num):
        t = 0
        for x in num:
            t += x ** 2
        return t

    def happynum(self, num):
        tmp_list = []
        tmp_res = 0
        tmp_num = num[:]
        flag = True
        while tmp_res != 1:
            tmp_res = self.total(tmp_num)
            if tmp_res in tmp_list:     #不是快乐数时，总会重复
                flag = False
                break
            else:
                tmp_list.append(tmp_res)
            #处理数字 -> 数字列表
            tmp_res_str = str(tmp_res)
            tmp_num = [int(x) for x in tmp_res_str]
        return flag, tmp_list

    #其他处理方式，直接使用数字 -> 字符串 -> 整型数字
    def happynum(self, num):
        seen = set()
        while num != 1:
            if num in seen:
                return False
            seen.add(num)
            num = sum(int(i) ** 2 for i in str(num))
        return True

if __name__ == '__main__':
    num = list(map(int, list(input())))
    solution = Solution()
    print(solution.happynum(num))